package _08_factory_method_pattern.v_extend.delay_init_factory;

import java.util.HashMap;
import java.util.Map;

/**
 * @Description: 延迟初始化工厂
 * 延迟加载框架是可以扩展的，例如限制某一个产品类的最大实例化数量，可以通过判断
 * Map中已有的对象数量来实现，这样的处理是非常有意义的，例如JDBC连接数据库，都会
 * 要求设置一个MaxConnections最大连接数量，该数量就是内存中最大实例化的数量
 * @Auther: 2019/6/11 16:09 by zhang.jy
 */
public class ProductFactory {
	private static final Map<String, Product> prMap = new HashMap();

	public static synchronized Product createProduct(String type) throws Exception {
		Product product = null;
		//如果Map中已经有这个对象
		if (prMap.containsKey(type)) {
			product = prMap.get(type);
		} else {
			if (type.equals("Product1")) {
				product = new ConcreteProduct1();
			} else {
				product = new ConcreteProduct2();


			}
			//同时把对象放到缓存容器中
			prMap.put(type, product);
		}
		return product;
	}
}